Code server

ABSTRACT

A code server operates in a data processing system having an operating system or environment, such as OS/2 or Windows, which processes coded programs in discrete code modules. The code server maintains linkage information between the various code modules forming an association representing all the linkage data for the entire program. This information is gathered by way of searching through the files of the computer network or by direct insertion into the code module information table. Once the associative data has been gathered, a coded program may be retrieved quickly and efficiently without the need for repetitive on-line searching because the user need refer only to the code server which contains a look-up tables storing the data representing the associative information.

[0001] The following invention relates to a code server operating in amulti-module operating system and more particularly to a code serverwhich can efficiently identify and provide modules of program codequickly and efficiently to a user.

[0002] A multi-module operating system includes programs consisting ofdynamically linked code modules that contain embedded references toother modules. The resolution of these external references occurs at runtime under control of the operating system. The code modules can act asindividual entities having knowledge of existence of other modules andfrequently possess the ability to call into, or jump into, or otherwisepass program control to external code modules.

[0003] When an operating system, such as OS/2 or an environment such asWindows, is resolving these external references, the code moduleinformation is gathered. This information may contain anything that auser needs such as location, length, format, translated file informationand a list of external references for each code module. Associativeinformation may be defined as the intermodule relationship for aparticular code module.

[0004] Multi-module systems such as OS/2 and Windows have a set rule forlocating the required code modules by searching through localdirectories and directories attached through a network to locate thecode modules and extract the needed code module information. Under OS/2this is called LIBPATH and is called PATH under both Windows and DOS.The time needed to associate code modules in this way remains constantand in the absence of sufficient disk caching does not changeirrespective of the number of times the same program is called, eitherfor the same or for a different user. This is an inefficient method forassociating programs.

[0005] Moreover, when code files such as applications programs arestored at locations that are remote from the ultimate program user, theoperating system must view any remote file server as a storage devicethat contains executable files. This is in fact no different from alocal storage device such as a hard or floppy disk. There are, however,numerous disadvantages to this arrangement. For example, multiple copiesof code files can become scattered between a user work station and theserver which makes it extremely difficult to maintain with currentprogram updates. Also, network traffic can become dominated by remoterequests for file access during association. This tends to slow down thenetwork, and, frequently, users simply copy all of the code files onto alocal hard disk to solve the problem. In the latter case coordinatedupdates become difficult and often storage space is wasted. Also, thefile server must have one copy of the code file for each and everyconfiguration of target machine. Finally, in a single computermulti-tasking system, so much swapping can be caused by the action ofreading and rereading the code file data that the process of associationcompletely dominates the useful work being done by the machine.

SUMMARY OF THE INVENTION

[0006] According to the present invention a code server is providedwhich stores the information generated when code modules are associated.This information is stored in a table form at the code server, and whenthe program is requested by a user, the code server queries its tablesto see if the information for that program or module is already stored.This greatly reduces the search time required to locate the sameinformation as a result of subsequent requests which would normallyoccur by searching in various directories. As a result, the network isless loaded. There is less traffic generated by needless searchrequests. Code files can be maintained efficiently because there will beno need to have multiple copies of the same code stored in local storagedevices where it may be difficult to locate in the event that updatesare necessary.

[0007] The code server of the present invention operates in a dataprocessing system having an operating system which processes codedprograms in discrete modules. The code server, which providesinformation to users of the data processing system, includes aninformation storage table containing linkage information needed to forman association between discrete modules of code forming at least partsof a coded program, and includes the capability for updating theinformation storage table as a result of search requests for codedprograms whose association data was not previously included in theinformation storage table.

[0008] The code server may also include a translation function fortranslating from an intermediate code so that the resultant, final codemay be used on different types of machines. Information relating to thetranslated or nontranslated status of code modules may also be stored inthe code server tables.

[0009] It is a principal object of this invention to provide a codeserver in a multi-module operating system which can provide informationlinking coded modules to a requesting user in a fast and efficientmanner.

[0010] It is a further object of this invention to provide a code serverfor users of a multi-module operating system which maintains a statusinformation look-up table containing association data pertaining tomodules of code thus lessening the need for local storage of codedprograms.

[0011] Yet a further object of this invention is to provide a codeserver which can maintain coded programs in a centralized fashion.

[0012] Still a further object of this invention is to provide a codeserver in a multi-module operating system or environment which includesa storage information table which automatically learns association datalinking various coded modules together as modules are requested by auser.

[0013] The foregoing and other objectives, features and advantages ofthe invention will be more readily understood upon consideration of thefollowing detailed description of the invention, taken in conjunctionwith the accompanying drawings.

BRIEF DESCRIPTION OF THE DRAWINGS

[0014]FIG. 1 is a block schematic diagram of a computer system employingthe code server of the present invention.

[0015]FIG. 2 is a schematic diagram of a coded program divided intomodules where the modules include associative data linking the modulestogether.

[0016]FIG. 3 is a flow chart diagram illustrating the manner in whichthe code server of the present invention develops an information storagetable containing associative data linking various coded modules.

[0017]FIG. 4 is a flow chart diagram illustrating the way in which theinformation storage table in the code server is updated with newassociative information.

[0018]FIG. 5 is a flow chart diagram illustrating the interaction of acode translator in the code server with the information storage table.

DETAILED DESCRIPTION OF THE INVENTION

[0019] A computer system employing the present invention includes acomputer network 10 coupled to a number of users 12, 14 and 16. Theusers may be computer terminals coupled to the network or may be othercomputer systems. The present invention works in the environment of amulti-module operating system or environment such as OS/2 or Windows, inwhich programs that run on the system are configured in modules. Amulti-module environment may also be created for systems such as MS DOSby the use of overlays which provide the functionality of a multi-modulesystem. As will be explained below with reference to FIG. 2, thesemodules contain linkage information which point to additional modulesand which collectively forms an association linking together at leastparts of a complete program.

[0020] A code server 18 is coupled to the network 10. The code server 18may be a separate outboard piece of hardware or may be built into thenetwork or may also be a part of the operating system itself. The codeserver 18 is embodied in a transaction oriented protocol forcommunication between the user and the code server 18 which allows theusers 12, 14, and 16 and the code server 18 to be on two remote computersystems or to be configured as separate disjoined tasks in amulti-processing system on a single computer. As such, the code server18 includes a protocol receiver 20 and a protocol sender 22. Anadvantage of the protocol receiver and the protocol sender is that theserver is relieved, as in all protocol-based systems, of the obligationto know the details of its ultimate client. This allows for effectiveand relatively easy communication between the code server 18 and theusers 12, 14, and 16 which can be on the same type or on different typesof machines because the data file contained in the protocol receiver 20or the protocol sender 22 is the only concern. In essence, no user needsto know anything about the operation of the code server 18 apart fromwhat data to include in the protocol. The protocol may contain anythingneeded for effective communication between the code server and the user.Examples may include, but are not limited to, the following requesttypes: code module request, code server responses, unresolved referenceslist, information on the user's setup such as screen type, drives,color, numeric processor, communication device, network card, memorytype and amount, processor and printer. In response to further protocolrequests the code server 18 can send code modules via the protocolsender 22 or by other means to a user 12, 14, 16.

[0021] The code server 18 includes a code module information table 24which stores information that links modules of coded programs together.The output of the code module information table 24 is connected to acomparator 26 which can be any device or software sub-routine used forcomparing the output of the code module information table 24 to thereceived protocol. The output of the comparator is coupled to both theprotocol sender 22 and to a code module searcher 28. The code modulesearcher 28 is connected to a translator 30 and to local storage 32. Yetanother output of the code module searcher 28 is coupled to a whollyseparate computer network 34 which consists of its own disk drive 36,users, generally designated at 38, or other storage devices 40.

[0022] The code module searcher also has an output coupled to an updater42 which is coupled, in turn, back to the code module information table24. The importance of the update function will be explained below inconnection with system operation. Other users may access the code serversuch as those who would perform maintenance on existing code or whowould install new programs and/or modules. In such cases a new user 44provides a new module or code module information 46 to a comparator 48.The comparator 48 compares the new module or module information withthat which is already stored in the code module information table 24. Ifthe information is new or different, it is provided to the updater 42which inserts the new information at its proper place in the informationtable 24.

[0023]FIG. 2 illustrates the way in which a typical program might beconfigured in modules in order to run in a multi-module operating systemor environment such as OS/2 or Windows. The main code module 50 includeslinkage information linking it with code module A, code module B andcode module C. Code module A designated at 52 contains linkageinformation to the main code module 50, code module D 54 and code moduleE 56. Code module D 54 stands alone while code module E 56 links back tothe main code module 50. Code module B 58 contains linkage informationto code module E and code module C 60 is linked to code module B. Codemodule F 62 is linked to two other code modules not shown and is notpart of the program formed by code modules A through E and the mainmodule, although it exists in a file in the same memory, or in anotherlocation in the computer network. Collectively the linkage informationreferred to above forms an associative set for the main code module andcode modules A through E. However, there is no association with codemodule F or its linked modules, code module Z and code module W. It isthis type of associative information that is stored in the code moduleinformation table 24 in FIG. 1. A request by a user for a particularcode module will immediately locate all of the associative informationpertaining to that module in the code module information table 24 if ithas been previously stored there.

[0024] An illustration of how the system operates is illustrates in FIG.3. A user 1 places a request on the network which is received by theprotocol receiver 20 at block 3. The protocol receiver 20 queries thecode module information table at block 5 to determine if the requestedinformation is already in the information table. If the answer is yes,the code server 18 at block 7 sends the code module information to theuser. It does this by comparing the request with the information in thecode module information table 24 in the comparator 26 to make sure thatthe information being sent is the information requested as interpretedby the protocol receiver 20. The user may then receive the informationat block 9. If the requested information is not stored in the codemodule information table the answer at block 5 is “no” and a searchindicated at block 11 is conducted for the module information. Thesearch is performed by the code module searcher 28 which looks for theinformation in local storage 32 or in the computer network 34 which mayinclude a user 38, hard storage devices 40 or a local drive or storageunit indicated at 36. The searcher 28 may also query users 12, 14 and16. The method for searching for code module linkage information is theconventional method that would ordinarily be undertaken by the operatingsystem in the absence of a code server. Also, within the protocol theuser may at any time send variations in the search order for locatingfiles. For example, the user may send an entire list of places to searchfor the code modules, tell the code server a file containing a list ofplaces to search, or insert an additional search location into anexisting search list.

[0025] The insertion of a new search location can be at any place in thesearch list. Placing the additional search location at the beginning ofthe list provides the opportunity to selectively change to a newlocation to find a first code module that one may wish to use inpreference to a second code module that would be located elsewhere undera search location placed later in the search list. In essence, thisallows the user to selectively decide on which code module, if two ormore exist, he would prefer associated at any particular time.

[0026] When the code module searcher 28 determines at block 13 whetherthe code module information was located, it copies the code moduleinformation into the code module information table 24 as indicated atblock 15. After this, as indicated at block 17, the code moduleinformation is transferred to the user. If not enough information on themodule is found, or in the case that translation is necessary andtranslation cannot for any reason be completed, an error message withcodes and subcodes to indicate the precise source and type of failure isreturned to the user as indicated at block 4.

[0027] The user then adds this code module information to his internalassociation table. This function is indicated at block 19 in FIG. 2. Theuser then determines if there are any unresolved references at block 21.If the answer is “no” the association of code modules is complete asindicated in block 23 but if the answer is “yes” as indicated at block25, a request is sent to the code server 18 as previously described.

[0028] As the code module association is being formed the information isstored in the code module information table 24 so that the next user whoneeds to associate the same code module will be able to locate itquickly without the time consuming effort of searching for thisinformation directly. With the information stored in the look-up tables,the server's response time is very much faster than conventionalmethods.

[0029] A particular advantage of the present system is the ease in whichcoded programs may be maintained. Because the system spends less timesearching for blocks of code in response to a user request, files may bestored in their expected locations and multiple copies of those files atlocal storage locations are no longer necessary.

[0030] When a code module is changed, such as by a user 44, the systemautomatically updates the code module information table as shown atblock 63 of FIG. 4. To update, several options exist such as simplydeleting the old data from the information table, clearing the totalinformation table or by some means such as turning off and on the codeserver. In the latter case the information table will completelyregenerate itself as code module information is requested from users.This code management is done in real time to replace old code moduleinformation with new code module information. Each time a code module ischanged (block 64), the old code module information in the informationstorage table 24 is examined by comparator 48. The change eitherrequires no change in the module linkage information (block 66) orrequires an update (block 67). If no change is necessary (because uponrequest the code server will locate the desired modules), theinformation may be added to the information table by use of updater 42.This will result in no search being required upon the first request forcode module information. In either case the code module informationtable 24 is maintained as current (block 68).

[0031] Referring to FIG. 3, Block 23 reflects the current status of thecode module information table 24. The information table 24 preferablycontains code module information on both untranslated and translatedcode modules because the storage space needed for such an informationtable is relatively small.

[0032] Generally referring to FIG. 5, a further application of the codeserver is to manage the translation of code from one form to another.The preparation of code for execution of a particular system may involvea translation of code. Some examples include, source to object code, onemachine format to another machine format, compilation from one operatingsystem to another operating system, and, preferably, a machineindependent format to a machine specific format. Though the code servercould do the translations, it is preferable that the code server simplyoversee the translations done by other programs.

[0033] Referring to FIG. 5, a user requests a code module from the codeserver as indicated at Block 27. The current state of the informationtable is indicated at Block 26. Assuming that the code module is knownto the code server 18 and has translated and/or untranslated code moduleinformation in the code module information table 24, then the codeserver 18 determines at Block 28 whether the requested code module istranslated. This is a check to determine if the requested translatedcode module information is in an appropriate form for the particularusers' system. If the information table 24 contains information ontranslation indicating a program which would be transportable to theuser system, then this translated information is transferred to the useras illustrated in Block 29. It should also be noted that code moduleinformation for an untranslated code module could be sent to the user ifit was usable in its then current form. If the information table 24 doesnot contain code module information as to translation status and if theuser requires translated code, at Block 30 the module is translated. AtBlock 31 the translated information is returned to the user and inaddition; the translation information is transferred to the updater 42so that the code module information table may be updated to now show atranslated code module. The end result is that the information table 24is maintained in a current condition with the latest update of moduleassociation information regardless of whether the code modules are to betranslated to p-code, some other code, or remain in their originalformat.

[0034] The process of translating files upon request, however,drastically reduces the required storage because there is no longer anyneed for servers to store all executable files for all possible systemsand configurations that might be needed. The best distribution formatfor code is in an intermediate form such as P-Code (pseudo code) or acompiler-generated parse tree as they are relatively portable andgenerally more compact than executable code. Preferably theuser-developer transforms this source code to intermediate code and thecode server 18 controls the transformation of intermediate code toexecutable code.

[0035] For example, in an office setting with 20 word processorsconnected to a network, all starting up the same word processing programfrom the network, the server response time is slow. With the code serverand code in an intermediate form, once the first translation hasoccurred, then the access for the remaining users is almostinstantaneous because the need for retranslation has been eliminated,This speed enhancement is equally applicable when the translating ofcode is not required but only the forming of the association is neededbecause the information table will contain all the needed code moduleinformation. For added flexibility for different user systems, machinedependent modules can also be used. It is apparent that in addition to aconsiderable time savings in performing association, another significanttime savings will be realized by only having to translate code modulesonce for a particular user configuration.

[0036] An added advantage of the code server is the ability to use theinformation table on a per user basis. This can be done with severalinformation tables or one information table with fields denoting whichcode module information goes to which user or users. A limitation inprior multi-module systems such as OS/2, is that the LIBPATHinstructions to tell the machine where to search for code modules werenot changeable without restarting the system. The code server'sinformation table is functionally equivalent to LIBPATH and can bechanged at any time, in real time, which is an added advantage.

[0037] With the server environment and changeable information tables,there is no assumption that all users have the same information table.For example, two developers can be writing different versions of thesame program with the same module name and the code server can keeptrack of each file separately for each developer. Multiple informationtables can provide user-specific association.

[0038] After completing the association the server then enables the userto execute the program by some means such as sending the files inresponse for each request for a piece of code, notifying the system thatthe user already has the code, transferring the files asynchronously,sending each module as the computer accesses it, sending code as needed,executing code via remote procedure calls, or informing the user as toother locations where the required code modules can be located. Anotheradded feature involves using a Cyclic Redundancy (or similar) Checksum(CRC) that embeds specifics of the user system placed with theinformation table for comparison of the new user's system to determineif the files need to be retranslated. For example, if the old CRC and anew request from a user sending his CRC do not match, then the previousfiles may not be compatible and require retranslation.

[0039] The terms and expressions which have been employed in theforegoing specification are used therein as terms of description and notof limitation, and there is no intention, in the use of such terms andexpressions, of excluding equivalents of the features shown anddescribed or portions thereof, it being recognized that the scope of theinvention is defined and limited on by the claims which follow.

What is claimed is:
 1. A method of processing data on a computer system,said computer system having an operating system for managing codedprograms in discrete modules, comprising the steps of: (a) receiving arequest from a user specifying a particular coded program module to berun on the computer system; (b) searching in a code module informationtable for associative data linking said particular coded program modulewith related program modules; (c) in the event that the association datais incomplete, initiating a search subprogram to locate linkageinformation between coded modules to complete said associative data; (d)updating the code module information table with linkage informationfound as the result of step (c); and (e) providing said linkageinformation to said user.
 2. The method of claim 1, further includingthe step of translating the code modules located as a result of thesearch subprogram to an intermediate code and updating the code moduleinformation table to indicate that said code modules have beentranslated.
 3. In a computer system having an operating system forprocessing coded programs in discrete modules, a code server comprisinga code module information table containing linkage information betweenmodules of a particular coded program, and means for generating saidlinkage information from said information table in response to a requestfrom a user for a module of a particular coded program.
 4. The codeserver of claim 3, further including search means for locating codemodule linkage information and means for updating the code moduleinformation table when such information is found, to form a complete setof associative data for a particular coded program module.
 5. The codeserver of claim 4, further including means for subsequently loading newlinkage information directly into the code module information table. 6.The code server of claim 3, further including means for overseeing thetranslation of code modules of said particular coded program from anintermediate code and for updating said code module information table toindicate as part of said association that said code modules have beentranslated.
 7. The method of claim 1, further including the step oftransferring said coded program module to said user.
 8. The method ofclaim 1, further providing a transaction-oriented protocol between saiduser and said operating system.